﻿#SingleInstance Force
; 定义保存文件路径
configFile := A_ScriptDir "\settings.ini"

; 读取上次保存的值并初始化变量
IniRead, vChangeKey, %configFile%, Settings, ChangeKey, 0
IniRead, vAutoHideWin, %configFile%, Settings, AutoHideWin, 0

; 确保 vChangeKey 是有效的数字值
vChangeKey := (vChangeKey = 1) ? 1 : 0

Gui, Font, s10 cGreen, Times New Roman
; 创建主窗口
Gui, Add, Text, cBlack, 1.鼠标%A_Space%
Gui, Add, Text, cRed X+0, 前进/后退%A_Space%
Gui, Add, Text, cBlack X+0, 按键模拟左键双击

Gui, Add, CheckBox, vChangeKey gToggleKeys y30 x30, 切换前进/后退

;2. Win + [ 映射为Home
Gui, Add, Text, cBlack y60 x10, 2.%A_Space%
Gui, Add, Text, cRed X+0, WIN + [%A_Space%%A_Space%%A_Space%
Gui, Add, Text, cBlack X+0, 映射为Home

;3. Win + ] 映射为End
Gui, Add, Text, cBlack y90 x10, 3.%A_Space%
Gui, Add, Text, cRed X+0, WIN + ]%A_Space%%A_Space%%A_Space%
Gui, Add, Text, cBlack X+0, 映射为End

;是否自动隐藏到系统托盘
Gui, Add, CheckBox, vAutoHideWin gToogleAuto y130 x30, 自动隐藏窗口

if(vAutoHideWin){
    Gui, Hide
}else{
    Gui, Show, h80 AutoSize, KeyMapper ; 设置窗口大小和标题
}



; 更新 CheckBox 的选中状态
GuiControl, , ChangeKey, % (vChangeKey ? "1" : "0") ; 根据 vChangeKey 设置 CheckBox 状态

GuiControl, , AutoHideWin, % (vAutoHideWin ? "1" : "0") ; 根据 vChangeKey 设置 CheckBox 状态



; 初始化热键状态
UpdateHotkeys()

; 设置托盘图标和菜单
Menu, Tray, NoStandard ; 清空默认托盘菜单
Menu, Tray, Add, 显示窗口, ShowWindow
Menu, Tray, Add, 退出程序, ExitScript
Menu, Tray, Tip, 鼠标键盘按键映射工具 ; 设置鼠标悬停时的提示
Menu, Tray, Icon, shell32.dll, 44 ; 设置托盘图标，使用系统图标库

Return

; 设置 Win + [ 和 Win + ] 为 Home 和 End 键
#[::
Send, {Home} ; 映射 Win + [ 为 Home 键
Return

#]::
Send, {End} ; 映射 Win + ] 为 End 键
Return

; 切换热键的处理函数
ToggleKeys:
    GuiControlGet, vChangeKey,, 切换前进/后退
    OutputDebug, CheckBox state (direct read): %vChangeKey%
    ; 保存当前 CheckBox 的值到配置文件
    IniWrite, %vChangeKey%, %configFile%, Settings, ChangeKey
    UpdateHotkeys() ; 更新热键状态
Return

;切换自动保存的处理函数
ToogleAuto:
    GuiControlGet, vAutoHideWin,, 自动隐藏窗口
    OutputDebug, AutoHideWin CheckBox state (direct read): %vAutoHideWin%
    ; 保存当前 CheckBox 的值到配置文件
    IniWrite, %vAutoHideWin%, %configFile%, Settings, AutoHideWin
Return

; 动态更新热键状态的函数
UpdateHotkeys() {
    global vChangeKey
    if (vChangeKey) {
        ; 启用 XButton1，禁用 XButton2
        Hotkey, XButton1, HandleXButton1, On
        Hotkey, XButton2, HandleXButton2, Off
    } else {
        ; 启用 XButton2，禁用 XButton1
        Hotkey, XButton1, HandleXButton1, Off
        Hotkey, XButton2, HandleXButton2, On
    }
}

; XButton1 的处理逻辑
HandleXButton1:
    OutputDebug, "XButton1 pressed"
    Click 2 ; 模拟双击鼠标左键
Return

; XButton2 的处理逻辑
HandleXButton2:
    OutputDebug, "XButton2 pressed"
    Click 2 ; 模拟双击鼠标左键
Return

; 点击 X 按钮关闭窗口
GuiClose:
    Gui, Hide ; 隐藏窗口
Return

; 双击托盘图标重新显示窗口
Menu, Tray, Click, 2 ; 设置双击托盘图标触发
ShowWindow:
Gui, Show ; 显示窗口
Return

; 退出脚本的处理函数
ExitScript:
ExitApp
